package org.fastsyncer.manager.driver;

/**
 * <ul>
 * <dt>驱动事件管理器：</dt>
 *  <dl>
 *      <li>1.添加观察者,addObserver()</li>
 *      <li>2.移除观察者,removeObserver()</li>
 *      <li>3.通知观察者,notice()</li>
 *  </dl>
 * </ul>
 * 
 * @author AE86
 * @date 2017年12月13日 下午15:06:44
 * @version 1.0.0
 */
public interface Subject{

    /**
     * 添加观察者
     * @param e
     */
    void addObserver(Event e);

    /**
     * 移除观察者
     * @param e
     */
    void removeObserver(Event e);
    
    /**
     * 通知注册事件的观察者们
     * <pre>
     *  由于注册的观察者可能会有很多,如果在同一时间等待观察者们完成事件处理,那么前端会一直处于
     *  等待响应或阻塞状态,同时事件还在频繁触发,系统可用资源会急剧下降.为防止这个问题发生,这
     *  里采用异步调用去触发事件,将事件存放至消息队列,并且限制消息队列并发请求数,超过系统请求
     *  直接拒绝或抛出异常.
     * </pre>
     * @param e 事件类型
     * @param id 驱动ID
     */
    void notice(String e, String id);
    
}
